﻿#pragma once
#include <cstdio>
#include <vector>
#include <string>

class SHA1
{
private:
	std::vector<int> X;//8*64=512，每个下标存放8位
	int W[80];//32位为一组
	int A, B, C, D, E;
	int A1, B1, C1, D1, E1;//缓冲区寄存器,产生最后结果
	int Turn;//加密分组数量

	//输出填充后的文本
	void printX();
	//循环左移
	int S(unsigned int x, int n);
	//文本的填充处理
	void append(const std::string& m);
	//W数组的生成
	void setW(std::vector<int>& m, int n);
	//ft(B,C,D)函数
	int ft(int t);
	//常量K
	int Kt(int t);
public:
	std::string sha1(const std::string& text);
};
